#!/bin/sh
# 脚本文件名：dmenubg-v2.sh, use my own xbgclip
# 部署后文件名：dmenubg（与 xbgclip 配合使用）
# 功能：筛选 ~/Pictures 中的图片 → 通过 dmenu 让用户选择 → 将路径传递给 xbgclip 设置背景

# --------------------------
# 配置项（可根据需求调整）
# --------------------------
PICTURES_DIR="${HOME}/Pictures"  # 图片文件夹路径（此处无需 ~ 或引号）
DMENU_PROMPT="选择背景图："       # dmenu 中的提示文本
XBGCLIP_CMD="xbgclip"            # xbgclip 程序路径（若不在环境变量 PATH 中，需写完整路径）

# --------------------------
# 步骤1：检查核心依赖是否安装
# --------------------------
# 检查 dmenu 是否存在
if ! command -v dmenu >/dev/null 2>&1; then
    echo "❌ 错误：未安装 'dmenu'！请先安装（例如：sudo apt install dmenu）。" >&2
    exit 1
fi

# 检查 xbgclip 是否存在（确保编译后已加入环境变量）
if ! command -v "${XBGCLIP_CMD}" >/dev/null 2>&1; then
    echo "❌ 错误：未找到 '${XBGCLIP_CMD}'！请先编译 xbgclip 并加入环境变量 PATH。" >&2
    echo "       编译命令：gcc xbgclip.c -o xbgclip -lX11 -lImlib2" >&2
    echo "       加入 PATH：export PATH=\$PATH:/你的/xbgclip/所在目录" >&2
    exit 1
fi

# --------------------------
# 步骤2：检查图片文件夹是否存在
# --------------------------
if [ ! -d "${PICTURES_DIR}" ]; then
    echo "❌ 错误：图片文件夹 '${PICTURES_DIR}' 不存在！请先创建（mkdir ${PICTURES_DIR}）。" >&2
    exit 1
fi

# --------------------------
# 步骤3：筛选图片并输出完整路径（xbgclip 需要完整路径）
# 支持格式：jpg、jpeg、png、gif、bmp、webp、svg（不区分大小写）
# --------------------------
list_image_fullpaths() {
    find "${PICTURES_DIR}" -maxdepth 1 -type f \
        \( -iname "*.jpg"  -o -iname "*.jpeg" -o -iname "*.png"  \
        -o -iname "*.gif"  -o -iname "*.bmp"  -o -iname "*.webp" \
        -o -iname "*.svg" \)
}

# --------------------------
# 步骤4：核心工作流：筛选图片 → dmenu 选择 → 传递给 xbgclip
# --------------------------
# 将图片完整路径传给 dmenu，用户选择后将路径传给 xbgclip
list_image_fullpaths | dmenu -i -p "${DMENU_PROMPT}" "$@" | "${XBGCLIP_CMD}"

# --------------------------
# 步骤5：处理工作流退出状态
# --------------------------
exit_code=$?
case $exit_code in
    0)
        # 成功（xbgclip 设置背景成功时返回 0）
        exit 0
        ;;
    1)
        # 无选择或错误（xbgclip 出错时返回 1，错误详情由 xbgclip 自行打印）
        exit 1
        ;;
    *)
        echo "❌ 意外错误：工作流退出码为 ${exit_code}" >&2
        exit $exit_code
        ;;
esac
